package vistas.ventanas;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import daos.MaterialDAO;
import entidades.Material;
import entidades.enums.TipoMaterial;

public class EditarMaterial extends JDialog {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public static final int MODIFICAR = 3;
	public static final int ELIMINAR = 4;
	public static final int AGREGAR = 5;
	private JTextField id, descripcion;
	private JComboBox<TipoMaterial> tipo;
	private JButton editar, cancelar;
	private Integer FLAG;
	private MaterialDAO materialDAO;

	public EditarMaterial() {
		setTitle("Agregar nuevo material deportivo");
		instanciar_componentes();
		cargar_componentes();
		listeners();
		pack();
		setModal(true);
		setVisible(true);
	}

	public EditarMaterial(Integer identificador, Integer flag) {
		setTitle("Datos del material deportivo");
		instanciar_componentes();
		FLAG = flag;
		cargar_componentes();
		listeners();
		cargar_valores(identificador);
		pack();
		setModal(true);
		setVisible(true);

	}

	private void cargar_valores(Integer identificador) {
		Material material;
		material = materialDAO.obtenMaterial(identificador);
		id.setText(String.valueOf(material.getId()));
		descripcion.setText(material.getDescripcion());
		tipo.setSelectedItem(material.getTipo());
		if (FLAG == MODIFICAR) {
			id.setEnabled(false);
			editar.setText("Modificar");
		}
		if (FLAG == ELIMINAR) {
			id.setEnabled(false);
			descripcion.setEnabled(false);
			tipo.setEnabled(false);
			editar.setText("Eliminar");
		}
	}

	private void listeners() {
		editar.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				try {
					Material material = new Material();
					material.setDescripcion(descripcion.getText());
					material.setTipo((TipoMaterial) tipo.getSelectedItem());

					if (FLAG == AGREGAR)
						materialDAO.guardaMaterial(material);
					if (FLAG == MODIFICAR) {
						material.setId(Integer.parseInt(id.getText()));
						materialDAO.actualizaMaterial(material);
					}
					if (FLAG == ELIMINAR) {
						material.setId(Integer.parseInt(id.getText()));
						materialDAO.eliminaMaterial(material);
					}
					dispose();

				} catch (Exception e2) {
					if (FLAG == ELIMINAR){
						JOptionPane
						.showMessageDialog(null,
								"El material no puede ser eliminado probablemente\n porque fue usado en un evento\n Sugerencia: Modifíquelo y sustitúyalo por uno nuevo");
						return;
					}
					System.out
							.println("El item ya existe o el id esta mal escrito");
				}

			}
		});

		cancelar.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				dispose();

			}
		});

	}

	private void cargar_componentes() {
		if (FLAG != AGREGAR)
			add(id);
		add(descripcion);
		add(tipo);
		add(editar);
		add(cancelar);

	}

	private void instanciar_componentes() {
		FLAG = new Integer(AGREGAR);
		materialDAO = new MaterialDAO();
		JPanel panel = new JPanel();
		setContentPane(panel);
		id = new JTextField();
		configurar_componente(id, "Nro. Identificador");
		descripcion = new JTextField();
		configurar_componente(descripcion, "Descripción");
		tipo = new JComboBox<TipoMaterial>();
		instanciarTipo(tipo);
		editar = new JButton("Aceptar");
		cancelar = new JButton("Cancelar");
	}

	private void configurar_componente(JComponent tf, String s) {
		tf.setBorder(BorderFactory.createTitledBorder(s));
		tf.setPreferredSize(new Dimension(150, 40));
	}

	private void instanciarTipo(JComboBox<TipoMaterial> cb) {
		cb.setBorder(BorderFactory.createTitledBorder("Tipo"));
		cb.setPreferredSize(new Dimension(150, 40));
		cb.addItem(TipoMaterial.canilleras);
		cb.addItem(TipoMaterial.careta);
		cb.addItem(TipoMaterial.cuerda);
		cb.addItem(TipoMaterial.elastico);
		cb.addItem(TipoMaterial.escudo);
		cb.addItem(TipoMaterial.guantes);
		cb.addItem(TipoMaterial.maquina);
		cb.addItem(TipoMaterial.morral);
		cb.addItem(TipoMaterial.otro);
		cb.addItem(TipoMaterial.pera);
		cb.addItem(TipoMaterial.pesas);
		cb.addItem(TipoMaterial.peto);
		cb.addItem(TipoMaterial.saco);
		cb.addItem(TipoMaterial.tatami);
		cb.addItem(TipoMaterial.textil);
		cb.addItem(TipoMaterial.vendas);
	}
}
